/**
 * @description user 控制层
 * @author LI
 */

const {
  createDecoratitemInfo,
  getDecoratitemInfosList,
  updateDecoratitemInfoById,
  deleteDecoratitemInfoById
} = require('../services/decoratitemInfo')
const { ReturnResult } = require('../model/ResultModel')

/**
 * 添加商品图片信息
 * @param {number} goodsInfoId 商品信息 id
 * @param {string} decoratItemId 项目 id
 * @param {number} itemNumber 项目数量
 * @param {number} itemPrice 人工辅料/单价
 */
async function addDecoratitemInfo({ goodsInfoId, decoratItemId, itemNumber, itemPrice }) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await createDecoratitemInfo({
      goodsInfoId,
      decoratItemId,
      itemNumber,
      itemPrice,
    })
    return new ReturnResult(0, null, true, "添加成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "添加失败，请重试")
  }
}

/**
 * 获取全部商品图片信息
 * @param {string} goodsInfoId 商品 id goodsInfoId
 * @param {number} page 第几页
 * @param {number} limit 多少条
 */
async function getDecoratitemInfosAll({ goodsInfoId, page, limit }) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    const result = await getDecoratitemInfosList({
      goodsInfoId,
      page,
      limit,
    })
    return new ReturnResult(result.count, result.rows, true, "查询成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "查询失败，请重试")
  }
}

/**
 * 更新商品项目信息
 * @param {number} id id
 * @param {number} itemNumber 项目数量
 * @param {number} itemPrice 人工辅料/单价
 */
async function updateDecoratitemInfo({ id, itemNumber, itemPrice }) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await updateDecoratitemInfoById({
      id,
      itemNumber,
      itemPrice,
    })
    return new ReturnResult(0, null, true, "更新成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "更新失败，请重试")
  }
}

/**
 * 删除商品项目信息
 * @param {number} id id
 */
async function deleteDecoratitemInfo(id) {
  try {
    // 接下来交给服务层，
    // 此处可以返回新增等数据库之后的信息 const user = 信息，最后返回这个 user 就是新增数据库的信息
    await deleteDecoratitemInfoById(id)
    return new ReturnResult(0, null, true, "删除成功")
  } catch (e) {
    console.error(e.message, e.stack)
    return new ReturnResult(0, null, false, "删除失败，请重试")
  }
}

module.exports = {
  addDecoratitemInfo,
  getDecoratitemInfosAll,
  updateDecoratitemInfo,
  deleteDecoratitemInfo
}
